package com.kuangstudy.handler;

import com.kuangstudy.config.userlocal.KConstants;
import com.kuangstudy.config.userlocal.UserThreadLocal;
import com.kuangstudy.entity.User;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 * @author zhangfushuai
 * @description 拦截器
 * @since 2022/4/18 10:21
 **/
@Slf4j
public class LoginInterceptor implements HandlerInterceptor {

    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        // 1:获取用户登录的信息
        User user = (User) request.getSession().getAttribute(KConstants.SESSION_USER);
        // 2:如果没有登录
        if (user == null) {
            // 3:直接服务器端重定向到登录进行登录
            response.sendRedirect("/login");
            return false;
        }

        // 本地用户存储
        UserThreadLocal.put(user);
        // 如果为false,直接阻断，不会处理任何动作，动作必须要你来决定(
        // 1：你可以选择跳转页面，（几乎用不到）
        // 2：你也重定向到你指定路由（常用做法）
        // 3：你也可以用流输出流程（常用做法）
        // 如果拦截器执行完毕，返回true,代表的是：执行完毕逻辑了，去处理你springmvc的路由方法
        return true;
    }

    @Override
    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
        log.info("33333333333333333------>postHandle 执行进来了");
        UserThreadLocal.clear();
    }

    @Override
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
        log.info("44444444444444444------>afterCompletion 执行进来了");
        UserThreadLocal.clear();
    }
}
